package com.yf.exam.modules.trainingarchives.coursetemplate.controller;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.base.Preconditions;
import com.yf.exam.common.entity.Result;
import com.yf.exam.core.api.dto.BaseIdReqDTO;
import com.yf.exam.core.api.dto.PagingReqDTO;
import com.yf.exam.modules.trainingarchives.coursetemplate.dto.req.OrgCourseTemplateReqDTO;
import com.yf.exam.modules.trainingarchives.coursetemplate.dto.resp.OrgCourseTemplateRespDTO;
import com.yf.exam.modules.trainingarchives.coursetemplate.service.OrgCourseTemplateService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * 课程模板表(OrgCourseTemplate)表控制层
 *
 * @author gengjiaxuan
 * @since 2025-01-15 22:14:16
 */
@RestController
@RequestMapping("/orgCourseTemplate")
@Slf4j
@Api(tags={"课程模板"})
public class OrgCourseTemplateController {
    /**
     * 服务对象
     */
    @Resource
    private OrgCourseTemplateService orgCourseTemplateService;

    /**
     * 新增课程模板
     */
    @PostMapping("/add")
    @ApiOperation(value = "新增课程模板")
    public Result<Boolean> add(@RequestBody OrgCourseTemplateReqDTO reqDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info("OrgCourseTemplateController.add.reqDTO:{}", JSON.toJSONString(reqDTO));
            }
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getCourse()), "课程内容不能为空!");
            Preconditions.checkArgument(!StringUtils.isBlank(reqDTO.getWorkTypeId()), "工种类型不能为空!");
            Preconditions.checkNotNull(reqDTO.getHours(), "课时不能为空!");
            return Result.ok(orgCourseTemplateService.add(reqDTO));
        } catch (Exception e) {
            log.error("OrgCourseTemplateController.add.error:{}", e.getMessage(), e);
            return Result.faild("新增课程模板失败!");
        }
    }

    /**
     * 删除课程模板
     * @param baseIdReqDTO
     * @return
     */
    @PostMapping("/delete")
    @ApiOperation(value = "删除课程模板")
    public Result<Boolean> delete(@RequestBody BaseIdReqDTO baseIdReqDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info("OrgCourseTemplateController.delete.baseIdReqDTO:{}", JSON.toJSONString(baseIdReqDTO));
            }
            Preconditions.checkNotNull(baseIdReqDTO.getId(), "课程模板id不能为空!");
            Boolean result = orgCourseTemplateService.deleteById(baseIdReqDTO.getId());
            return Result.ok(result);
        } catch (Exception e) {
            log.error("OrgCourseTemplateController.delete.error:{}", e.getMessage(), e);
            return Result.faild("删除课程模板失败!");
        }

    }

    /**
     * 更新课程模板
     * @param reqDTO
     * @return
     */
    @PostMapping("/update")
    @ApiOperation(value = "更新课程模板")
    public Result<Boolean> update(@RequestBody OrgCourseTemplateReqDTO reqDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info("OrgCourseTemplateController.update.reqDTO:{}", JSON.toJSONString(reqDTO));
            }
            Preconditions.checkNotNull(reqDTO.getId(), "课程模板id不能为空!");
            Boolean result = orgCourseTemplateService.update(reqDTO);
            return Result.ok(result);
        } catch (Exception e) {
            log.error("OrgCourseTemplateController.update.error:{}", e.getMessage(), e);
            return Result.faild("更新课程模板失败");
        }
    }

    /**
     * 分页查找（课程模板）
     * @param reqDTO
     * @return
     */
    @ApiOperation(value = "分页查找")
    @PostMapping("/paging")
    public Result<IPage<OrgCourseTemplateRespDTO>> paging(@RequestBody PagingReqDTO<OrgCourseTemplateReqDTO> reqDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info("OrgCourseTemplateController.paging.reqDTO:{}", JSON.toJSONString(reqDTO));
            }
            //分页查询并转换
            IPage<OrgCourseTemplateRespDTO> page = orgCourseTemplateService.paging(reqDTO);
            return Result.ok(page);
        } catch (Exception e) {
            log.error("OrgCourseTemplateController.paging.error:{}", e.getMessage(), e);
            return Result.faild("查询失败");
        }
    }

    /**
     * 课程模板详情
     */
    @PostMapping("/detail")
    @ApiOperation(value = "获取课程模板详情")
    public Result<OrgCourseTemplateRespDTO> detail(@RequestBody BaseIdReqDTO baseIdReqDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info("OrgCourseTemplateController.detail.baseIdReqDTO:{}", JSON.toJSONString(baseIdReqDTO));
            }
            Preconditions.checkArgument(!(baseIdReqDTO.getId() == null), "课程模板ID不能为空!");
            return Result.ok(orgCourseTemplateService.getDetail(baseIdReqDTO));
        } catch (Exception e) {
            log.error("OrgCourseTemplateController.detail.error:{}", e.getMessage(), e);
            return Result.faild("查询课程模板详情失败!");
        }
    }

}

